#!/bin/ksh
# @(#)25        1.71.1.12  src/sysmgt/dsm/bin/wjava.sh, websm, r31a.hsc, hsc_wsm_101002 9/27/02 10:16:34";


unset ENV

export WSMDATA=/tmp/wsmdata.$$/wsmdata
export VimDATA="$WSMDATA"


OS=`/bin/uname -s`

if [ "$OS" = "Linux" ] ; then
  HOSTNAME=/bin/hostname
else
  HOSTNAME=/usr/bin/hostname
fi

#
# check if the person is remotely logged in, set DISPLAY if yes
#
LOG_PTS=`tty | sed 's@/dev/@@'`

LOG_HOST=`who | grep "$LOG_PTS " | grep "(" | cut -f2 -d '(' | cut -f1 -d')' | cut -f1 -d':'`
if [[ -n $LOG_HOST && -z $DISPLAY ]]; then
 export DISPLAY=$LOG_HOST:0
 export WSMDISPLAY=$LOG_HOST:0
fi


#
# Set DISPLAY if not already set (see 293786) 
#
# WSMDISPLAY is used to pass value to java for remote mode
WSMDISPLAY=$DISPLAY

if [[ -z $WSMDISPLAY ]]; then
 # if no value is set, use DISPLAY for regular mode, and do
 # not use hostname b/c its faster
 # set WSMDISPLAY so remote mode will work
 export DISPLAY=":0.0"
 export WSMDISPLAY=$(${HOSTNAME})":0.0"

else
  # In remote mode, the format ":0.0" will not work, need
  # the hostname b/c client does not know display value
  a=`echo $WSMDISPLAY | cut -f1 -d:`
  if [[ -z $a ]]; then
        export WSMDISPLAY=$(${HOSTNAME})":0.0"
  fi

fi

#
# Are we running on the same machine as our display?
#
# Look for pattern: [[hostpath]:display_id]
#
hostpath=${DISPLAY%%:*}   # Everything before the first colon
localMachine=y
if [[ $hostpath != "" ]]
 then
   localAddr=`host \`hostname\` | LANG=C awk '{sub(",", "", $3); print $3}'`
   displayAddr=`host $hostpath | LANG=C awk '{sub(",", "", $3); print $3}'`
   if [[ $localAddr != $displayAddr ]]
    then
      localMachine=n  # May not be entirely true; machines can have multiple
                      # adapters.
   fi
fi

HOMEDIR=/usr/websm
export ODMDIR=/etc/objrepos

MessageLang=$(locale | grep LC_MESSAGES | sed 's/\"//g' | cut -d'=' -f2)



# set the path where the supported java version should reside
if [ "$OS" = "AIX" ] 
 then
  JAVA_PATH=/usr/java131
else
  JAVA_PATH=/opt/IBMJava2-131
fi


if [ -d $JAVA_PATH ]
 then
   export PATH=${JAVA_PATH}/bin:${JAVA_PATH}/jre/bin:/bin:/usr/bin:/usr/sbin:${HOMEDIR}/bin:$PATH
 else
   echo "Java 1.3.1 is required"
   exit 1
fi

if [ "$OS" = "AIX" ] ; then
  DOC_SERVER_NAME=$(grep "^DOCUMENT_SERVER_MACHINE_NAME=" /etc/environment | sed 's/^DOCUMENT_SERVER_MACHINE_NAME=//')
  DOC_SERVER_PORT=$(grep "^DOCUMENT_SERVER_PORT=" /etc/environment | sed 's/^DOCUMENT_SERVER_PORT=//')
fi

if [ -z "$DOCUMENT_SERVER_MACHINE_NAME" ]; then
  export DOCUMENT_SERVER_MACHINE_NAME=$DOC_SERVER_NAME
fi
if [ -z "$DOCUMENT_SERVER_PORT" ]; then
  export DOCUMENT_SERVER_PORT=$DOC_SERVER_PORT
fi


# Bold fonts in double byte languages do not display well.  Need to
# set a java variable to disable this.
if [ "$OS" = "AIX" ] ; then
 case $LANG in
      ja_JP ) JAVA2D_PURET2KRASTERIZER=1
            ;;
      Ja_JP ) JAVA2D_PURET2KRASTERIZER=1
            ;;
      JA_JP ) JAVA2D_PURET2KRASTERIZER=1
            ;;
      Zh_TW ) JAVA2D_PURET2KRASTERIZER=1
            ;;
      ZH_TW ) JAVA2D_PURET2KRASTERIZER=1
            ;;
      Zh_CN ) JAVA2D_PURET2KRASTERIZER=1
            ;;
      ZH_CN ) JAVA2D_PURET2KRASTERIZER=1
            ;;
      KO_KR ) JAVA2D_PURET2KRASTERIZER=1
            ;;
      ko_KR ) JAVA2D_PURET2KRASTERIZER=1
            ;;
 esac
 export JAVA2D_PURET2KRASTERIZER
fi

JAVA_OPTS=""
if [[ $WSM_DEBUG -ge 4 ]]
 then
   JAVA_OPTS="$JAVA_OPTS -DIDebug.showAll=true -DIDebug.debugClasses=*"
fi

if [[ $WSM_DEBUG -ge 5 ]]
 then
   JCBD=true
   JAVA_OPTS="$JAVA_OPTS -DDebugCBJ=true"
fi

if [[ -n $JCBD ]]
 then
   comlib=jcbd.jar
 else
   comlib=jcb.jar
fi


#
# Current directory will be $CODEBASE
#

CODEBASE="${HOMEDIR}/codebase"
StartDir="$CODEBASE"

if [[ ! -d $StartDir ]]; then
  echo "Cannot get to codebase directory:\n	$StartDir" >&2
  exit 1
fi 

cd $StartDir

CLASSPATH="wsmdebug.jar:sslite-us.zip:sslite-ex.zip:$comlib"
CLASSPATH="${CLASSPATH}:wsmextra.jar:jcchart.jar:jcswingsuite.jar"
CLASSPATH="${CLASSPATH}:taskguide:mm_snmp.jar:.:wsm.jar:habeans.jar:log.jar"

for p in `ls pluginjars/*.jar 2>/dev/null`
 do
   CLASSPATH="${CLASSPATH}:$p"
done

#
# allow a custom classpath
#
if [[ ! -z ${CUSTOM_CLASSPATH} ]]
then
    CLASSPATH=wsmdebug.jar:${CUSTOM_CLASSPATH}
fi

if [[ -r ${HOMEDIR}/security/tmp ]] ; then
  CLASSPATH="${CLASSPATH}:${HOMEDIR}/security/tmp"
fi

export CLASSPATH

LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:"${HOMEDIR}/lib"
LIBPATH=${LD_LIBRARY_PATH}:${LIBPATH}
export LIBPATH
export LD_LIBRARY_PATH

ImageDir=${CODEBASE}/images

PATH=$PATH:${HOMEDIR}/bin

HEAP_MEM=128
unset STACK_OPT
if [[ "$OS" = "Linux" ]] 
 then
   STACK_OPT="-Xoss512k -Xss512k"
   MEM=`(/usr/bin/free -mo|/bin/awk '{ if (NR == 2) print $2}') 2> /dev/null`
   if  [ ! -z $MEM ]
    then
       (( MEM /= 2))
          MEM=${MEM}m
    else
	  MEM=1g
   fi
  W_HEAP_MAX_SIZE="${W_HEAP_MAX_SIZE:-$MEM}"
  JAVA_OPTS="$JAVA_OPTS $STACK_OPT -Xmx${W_HEAP_MAX_SIZE} \
             -DMessageLang=${MessageLang} \
             -Ddisplay=$WSMDISPLAY -DWINDOWID=$WINDOWID"
else  # AIX
  W_HEAP_MAX_SIZE="${W_HEAP_MAX_SIZE:-1g}"
  JAVA_OPTS="$JAVA_OPTS -Xmx${W_HEAP_MAX_SIZE} \
             -DMessageLang=${MessageLang} \
             -Ddisplay=$WSMDISPLAY -DWINDOWID=$WINDOWID"
  JAVA_COMPILER=${JAVA_COMPILER:-NONE}  # Don't use JIT by default.
  if [ ${JAVA_PATH} = /usr/java131 ]
   then
     JAVA_OPTS="-Xquickstart $JAVA_OPTS"
  fi
fi
export JAVA_COMPILER


if [[ $localMachine = "n" ]]
 then
   # Slow down the rate at which the progress bar is updated. 21,000 = update
   # every 1 second.

   JAVA_OPTS="$JAVA_OPTS -DProgBarLoop=21000"
fi

export FORCEDEFVIS=1  # Force X to use 8-bit color instead of 32. Helps for
                      # remote-X

if [[ $# -gt 0 && $1 = "-n" ]] ; then
#Don't put the command in the background
 shift
fi

# On a multi processor environment, limit the execution to only one processor

if [ -x /usr/sbin/bindprocessor ] ; then
  /usr/sbin/bindprocessor $$
fi

# set WEBSM_ALL_PERMISSIONS_FOR_SECURE to workaround security in remote SSL mode
JAVA_OPTS="$JAVA_OPTS -DWEBSM_ALL_PERMISSIONS_FOR_SECURE=true"

if [[ $WEBSM_JAVA_DEBUG != "" ]]
 then
   webSMInstances=0
   if [[ -f /tmp/websmJavaDebugPorts ]]
    then
      webSMInstances=$(wc /tmp/websmJavaDebugPorts | awk '{print $1}')
   fi
   
   (( port=$webSMInstances+8000 ))
   echo port: $port `date` >> /tmp/websmJavaDebugPorts
   echo "Debug Port/Socket is: " + $port
   JAVA_OPTS="$JAVA_OPTS -Xdebug -Xnoagent -Djava.compiler=NONE \
             -Xrunjdwp:transport=dt_socket,server=y,address=$port,suspend=n"
fi

if [ "$OS" = "Linux" ] ; then
JAVA_OPTS="$JAVA_OPTS -Djavax.net.ssl.keyStore=/usr/websm/codebase/SM.pubkr \
                      -Djavax.net.ssl.keyStorePassword=defp \
                      -DcimomConfigFile=/opt/hsc/data/cimomcfg.properties \
                      -Dorg.snia.wbem.cimom.properties=/opt/hsc/data/cim.properties"
fi

if [[ -f /var/hsc/log/.DEBUG_HSC ]]
 then
   for p in "$@"
    do
      x="${p#com.ibm.websm.}"
      if [[ "$x" != "$p" ]]
       then
         cmd="$x"
         break
      fi
   done
   rm -f /tmp/$cmd.log 2>/dev/null
   touch /tmp/$cmd.log 2>/dev/null
   chmod a+w /tmp/$cmd.log 2>/dev/null  # Make sure other users can write in 
   if [[ -w /tmp/$cmd.log ]]            # future.
    then
      exec ${JAVA_PATH}/jre/bin/java $JAVA_OPTS "$@" 2> /tmp/$cmd.log
    else
      exec ${JAVA_PATH}/jre/bin/java $JAVA_OPTS "$@"
   fi
else
   exec ${JAVA_PATH}/jre/bin/java $JAVA_OPTS "$@"
fi
